<?php
declare(strict_types=1);

namespace App\Common\Modular\Data\Serve;

use App\Common\Modular\Data\Model\BannerModel;
use Core\Basics\BasicsServe;
use Zms\Unit\Is;
use Hyperf\Database\Model\Builder;

/**
 * 广告轮播模型
 * Class BannerServe
 * @package App\Common\Service\Data
 */
class BannerServe extends BasicsServe
{
    const BLOG_HOME = 'blog-home';


    /**
     * @return BannerModel::class
     */
    public static function model(): string
    {
        return BannerModel::class;
    }

    /**
     * 获取轮播分类(位置)，写死即可,没必要动态,支持两层，后续开发需要多层自己处理
     * ['value'=>'','label'=>'','children=>[]]
     * @return array
     */
    public function getClassify(): array
    {
        return [
            ['value' => self::BLOG_HOME, 'label' => '博客首页'],
        ];
    }


    /**
     * 搜索标题
     */
    protected function searchTitle(Builder $query, $value): void
    {
        if (is_string($value) && Is::notEmpty($value)) {
            $query->whereRaw("`title` LIKE ?", ["%$value%"]);
        }
    }


    /**
     * 获取指定位置的轮播
     * @param string $position
     * @param int $limit
     * @return array
     */
    public function getBannerData(string $position, int $limit = 10): array
    {
        return $this->search(['status' => 1, 'position' => $position])
            ->orderByRaw('sort DESC,id DESC')
            ->limit($limit)
            ->select(['id', 'title', 'url', 'image', 'color'])
            ->get()
            ->toArray();
    }
}